/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.garcomeletronico.fachada;

import br.com.garcomeletronico.bean.Funcionario;
import br.com.garcomeletronico.bean.Prato;
import br.com.garcomeletronico.bean.Cardapio;
import br.com.garcomeletronico.bean.Mesa;
import br.com.garcomeletronico.bean.Pedido;
import br.com.garcomeletronico.controlador.implementacao.ControladorFuncionario;
import br.com.garcomeletronico.controlador.implementacao.ControladorPrato;
import br.com.garcomeletronico.controlador.implementacao.ControladorCardapio;
import br.com.garcomeletronico.controlador.implementacao.ControladorGerarCardapio;
import br.com.garcomeletronico.controlador.implementacao.ControladorMesa;
import br.com.garcomeletronico.controlador.implementacao.ControladorPedido;

import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author tulio.luis
 */
public class Fachada {
    
    private ControladorFuncionario controladorFuncionario;
    private ControladorPrato controladorPrato;
    private ControladorCardapio controladorCardapio;
    private ControladorGerarCardapio controladorGerarCardapio;
    private ControladorPedido controladorPedido;
    private ControladorMesa controladorMesa;
    private static Fachada instancia;
    
    private Fachada() {
        init();
    }
    
    private void init() {
        
        if (controladorFuncionario == null) {
            controladorFuncionario = new ControladorFuncionario();
        }
        if (controladorPrato == null) {
            controladorPrato = new ControladorPrato();
        }
        if (controladorCardapio == null) {
            controladorCardapio = new ControladorCardapio();
        }
        if (controladorGerarCardapio == null) {
            controladorGerarCardapio = new ControladorGerarCardapio();
        }
        if (controladorMesa == null) {
            controladorMesa = new ControladorMesa();
        }
        if (controladorPedido == null) {
            controladorPedido = new ControladorPedido();
        }
    }
    
    public static Fachada getInstancia() {
        if (instancia == null) {
            instancia = new Fachada();
        }
        return instancia;
    }
    
    public void inserirFuncionario(Funcionario f) throws SQLException {
        this.controladorFuncionario.inserir(f);
    }
    
    public void alterarFuncionario(Funcionario f) throws SQLException {
        this.controladorFuncionario.alterar(f);
    }
    
    public void excluirFuncionario(Funcionario f) throws SQLException {
        this.controladorFuncionario.excluir(f);
    }
    
    public List<Funcionario> listarPorNome(Funcionario f) throws SQLException {
        return this.controladorFuncionario.listarPorNome(f);
    }
    
    public List<Funcionario> listarTodos() throws SQLException {
        return this.controladorFuncionario.listarTodos();
    }
    
    public void inserirPrato(Prato p) throws SQLException {
        this.controladorPrato.inserir(p);
    }
    
    public void alterarPrato(Prato p) throws SQLException {
        this.controladorPrato.alterar(p);
    }
    
    public void excluirPrato(Prato p) throws SQLException {
        this.controladorPrato.excluir(p);
    }
    
    public List<Prato> listarPorNomePrato(Prato p) throws SQLException {
        return this.controladorPrato.listarPorNome(p);
    }
    
    public List<Prato> listarTodosPratos() throws SQLException {
        return this.controladorPrato.listarTodos();
    }
    
    public List<Prato> listarPratosPorCardapio(Cardapio cardapio) throws SQLException {
        return this.controladorPrato.listarPratosPorCardapio(cardapio);
    }
    
    public void inserirCardapio(Cardapio c) throws SQLException {
        this.controladorCardapio.inserir(c);
    }
    
    public void alterarCardapio(Cardapio c) throws SQLException {
        this.controladorCardapio.alterar(c);
    }
    
    public void excluirCardapio(Cardapio c) throws SQLException {
        this.controladorCardapio.excluir(c);
    }
    
    public List<Cardapio> listarPorNomeCardapio(Cardapio c) throws SQLException {
        return this.controladorCardapio.listarPorNome(c);
    }
    
    public List<Cardapio> listarTodosCardapio() throws SQLException {
        return this.controladorCardapio.listarTodos();
    }
    
    public List<Cardapio> listarTodosGerarCardapoio() throws SQLException {
        return this.controladorGerarCardapio.listarTodos();
    }
    
    public void inserirMesa(Mesa m) throws SQLException {
        this.controladorMesa.inserir(m);
    }
    
    public void alterarMesa(Mesa m) throws SQLException {
        this.controladorMesa.alterar(m);
    }
    
    public void excluirMesa(Mesa m) throws SQLException {
        this.controladorMesa.excluir(m);
    }
    
    public List<Mesa> listarTodosMesa() throws SQLException {
        return this.controladorMesa.listarTodos();
    }
    
    public void fazerPedido(Pedido pojo, Mesa pojo2, List<Prato> listaPratos) throws SQLException {
        this.controladorPedido.fazer(pojo, pojo2, listaPratos);
    }
    
    public void atualizarProntoPedido(Pedido p1) throws SQLException {
        this.controladorPedido.atualizarpronto(p1);
    }
    
    public void atualizarAguardandoPedido(Pedido p1) throws SQLException {
        this.controladorPedido.atualizaraguardando(p1);
    }
    
    public void atualizarAtendidoPedido(Pedido p1) throws SQLException {
        this.controladorPedido.atualizaratendido(p1);
    }
    
    public void atualizarCancelarPedido(Pedido p1) throws SQLException {
        this.controladorPedido.atualizarcancelar(p1);
    }
    
    public List<Pedido> listarTodosPedidos() throws SQLException {
        return this.controladorPedido.listarTodos();
    }
    
    public List<Pedido> listarPagamentos() throws SQLException {
        return this.controladorPedido.listarPagamentos();
    }
    
    public void Pagarpedido(Pedido p) throws SQLException {
        this.controladorPedido.PedidoPago(p);
    }
}